特定のファイルを Git の管理下から除外する (.gitignore)
Git が得意ではないファイル
Git でファイルのバージョンを管理する中で「Git が得意でないファイル」を知っておくことも重要です。
https://gyazo.com/d8a57da27c50c42f2e1a2a36182b930c
(1) の例:ツールで自動生成できるファイル (HTMLビルダー, ORマッパーなど)
(2) の例:通常のソースコード、テキストファイル (.txt, .md, .py, .cpp など)
(3) の例:コンパイル時なのに生成されるファイルや実行形式ファイル (.o, .exe, .out など)
(4) の例:画像やワードファイルなどの1回管理してもなかなか変わらないバイナリファイル (.png, .jpg, .gif, .pdf, .docs など)
また、個人の環境によって変化するファイルも Git の管理下から除外するべきでしょう。エディタの設定ファイルや環境変数ファイルがこれに該当します。さらにパスワード等の機密情報が書かれたファイルも必ず除外するべきです。APIのクレデンシャルファイルを間違えてGit管理してしまい、漏洩したケースも多く見られます。
Git が得意ではないファイルは管理から除外する
ファイルの除外設定は .gitignore ファイルを記述することで設定します。
.gitignore を保存する場所は Git 管理下にあるディレクトリ です。しかし保存したディレクトリ以下に除外設定を行うため、.gitignore より上層のディレクトリは除外対象に入りません。基本的には .git ディレクトリと同じ階層に保存すると良いでしょう。
複数の .gitignore が複数の階層にある場合、階層が深いファイルの設定が優先されます。
code: 複数の.gitignore
git-sample
├ .git
├ .gitignore
├ child
│ ├ .gitignore
│ └ child.txt <- git-sample/child/.gitignore の設定が優先される
├ tracked.txt <- git-sample/.gitignore の設定のみ適用される
└ untracked.txt <- git-sample/.gitignore の設定のみ適用される
.gitignore を記述する
パターンマッチングによって記述します。本記事ではいくつかの例を挙げることに留めます。
${ファイル名}:ファイル名を除外します。しかしサブディレクトリにも同名のファイルがあった場合も除外されます。
*.out:このパターンは拡張子に .out を持つファイルを除外します。sample.out, child/sample2.out, child/child/sample3.out などがマッチングします。
**/*.exe:あるディレクトリ以下に存在する .exe ファイルを除外します。child/sample2.out, child/child/sample3.out などがマッチングしますが、sample.out はマッチングしません。
/*.exe:.gitignore と同階層に存在する .exe ファイルを除外します。sample.out がマッチングしますが、 child/sample2.out, child/child/sample3.out などはマッチングしません。
${ディレクトリ名}/:指定されたディレクトリ以下を除外します。サブディレクトリにも同名のディレクトリがあった場合も除外されます。child/ と記述した場合、 child/ や x/sample/ がマッチングします。
/${ディレクトリ名}/:.gitignore と同階層に存在するディレクトリ以下を除外します。child/ と記述した場合、 child/ がマッチングしますが、 x/sample/ はマッチングしません。
!${パターン}:例外的に除外の対象から除外されます。つまり管理対象になります。 *.png と !sample.png を記述した場合、 test.png, child/test.png などは除外されますが、 sample.png, child/sample.png は管理対象になります。
しかしながら .gitignore ファイルの記述というものは大体テンプレートがあるものです。 gitignore.io は言語やフレームワーク、IDEを指定するとテンプレートを自動で作成してくれるサービスです。作成結果を .gitignore にコマンドで反映することもできます。gitignore.io で作成したあとに設定をカスタマイズすると良いでしょう。 gitignore.io を利用する
1. 検索欄で必要な言語やフレームワーク、IDEを指定して Create する。
https://gyazo.com/c35b49242252014393ec6f65e1f8928c
2. 結果が表示される。これをコピペしても良いが、もっとスマートにするためにURLをコピーする。
https://gyazo.com/e1cfc35d2242ad125fc6dde155366054
3. 以下のコマンドを .gitignore を作りたいディレクトリで実行する。
code: .gitignoreをgitignore.ioから作成する.sh
$ curl ${コピーしたURL} > .gitignore